"""
ConcurrentRotatingFileHandler 是logging.handlers 模块中专门为多进程环境设计的日志处理器。
它基于文件锁机制，允许在多进程环境下安全地进行日志文件轮转。
"""

import logging
from logging.handlers import ConcurrentRotatingFileHandler
from fastapi import FastAPI

app = FastAPI()


def setup_logging():
    formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
    file_handler = ConcurrentRotatingFileHandler('app.log', 'a', 1024 * 1024, 5)
    file_handler.setFormatter(formatter)
    logger = logging.getLogger('app')
    logger.addHandler(file_handler)
    logger.setLevel(logging.INFO)
    return logger


@app.get("/")
def read_root():
    logger = setup_logging()
    logger.info("Handling root request")
    return {"Hello": "World"}


if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="127.0.0.1", port=8000)

"""
在上述代码中，ConcurrentRotatingFileHandler 的构造函数接收日志文件名
（app.log）、写入模式（'a' 表示追加）、单个日志文件的最大字节数（1024 * 1024 即 1MB）以及保留的备份文件数量（5）。
当日志文件大小达到设定的最大值时，它会安全地进行文件轮转，自动重命名旧文件并创建新文件，有效避免多进程环境下的冲突。
"""